#ifndef ACCIONES_H_
#define ACCIONES_H_

#include <sigc++/signal.h>
#include <sigc++/connection.h>
#include <vector>
#include <functional>
#include <algorithm>

class Acciones : public sigc::trackable {
   private:
      std::vector<sigc::connection> set;
      bool activo;

   protected:
      void agregar(sigc::connection c) {
         set.push_back(c);
         set.back().block(not activo);
      }

      void bloquear() {
         if(not activo) return;
         std::for_each(set.begin(), set.end(), std::bind2nd(std::mem_fun_ref(&sigc::connection::block), true));
         activo = false;
      }

      void desbloquear() {
         if(activo) return;
         std::for_each(set.begin(), set.end(), std::mem_fun_ref(&sigc::connection::unblock));
         activo = true;
      }

   public:
      Acciones() : activo(false) {}
      virtual ~Acciones() {}

};
#endif
